home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / c / appsource.lha / APlusPlus / TESTPRGS / graphics / Canvas_test.cxx < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-29  |  8.1 KB  |  298 lines

  1. /******************************************************************************
  2.  *
  3.  *    $Source: apphome:RCS/testprgs/graphics/Canvas_test.cxx,v $
  4.  *
  5.  *    Demo for the A++ Library
  6.  *    Copyright (C) 1994 by Armin Vogt, EMail: armin@uni-paderborn.de
  7.  *
  8.  *    $Revision: 1.7 $
  9.  *    $Date: 1994/07/23 19:14:56 $
  10.  *    $Author: Armin_Vogt $
  11.  *
  12.  ******************************************************************************/
  13.  
  14.  
  15. static const char rcs_id[] = "$Id: Canvas_test.cxx,v 1.7 1994/07/23 19:14:56 Armin_Vogt Exp Armin_Vogt $";
  16.  
  17.  
  18. //**  This demo can use ITransponders as alternative to the Constraints.
  19. //**  To compile with ITransponders define USE_ITP.
  20.  
  21.  
  22.  
  23. extern "C" {
  24. #include <dos/dos.h>
  25. }
  26.  
  27. #include <stdio.h>
  28.  
  29. #include <APlusPlus/exec/SignalResponder.h>
  30. #include <APlusPlus/intuition/GWindow.h>
  31. #include <APlusPlus/gadtools/GT_Scroller.h>
  32. #include <APlusPlus/intuition/BoopsiGadget.h>
  33. #include <APlusPlus/graphics/Canvas.h>
  34. #include <APlusPlus/intuition/IntuiMessageC.h>
  35. #include <APlusPlus/graphics/GBorder.h>
  36.  
  37.  
  38. //------- use ITransponders instead of Constraints --------
  39. #define USE_ITP
  40.  
  41. #ifdef USE_ITP
  42. #include <APlusPlus/intuition/ITransponder.h>
  43. #endif
  44.  
  45. BOOL running = TRUE;
  46. BOOL close2 = FALSE;
  47.  
  48. class MySRSP : public SignalResponder
  49. {
  50.    public:
  51.       MySRSP(BYTE signal) : SignalResponder(signal,0) {}
  52.       ~MySRSP() {}
  53.       // overload the virtual 'signal received' action callback method.
  54.       void actionCallback()
  55.       {
  56.          puts("**Break\n");
  57.          running = FALSE;
  58.       }
  59. };
  60. class MyCanvas : public Canvas
  61. {
  62.    public:
  63.       MyCanvas(GOB_OWNER,AttrList& attrs) : Canvas(gob_owner,attrs) { }
  64.       ~MyCanvas() {}
  65.  
  66.       void drawSelf()
  67.       {
  68.          setAPen(1);
  69.          move(10,10);
  70.          text((UBYTE*)"Hey, this is a canvas demo.");
  71.          move(10,30);
  72.          for (XYVAL x=30;x<900;x+=30)
  73.             {
  74.                move(10+x,30+x/6);
  75.                draw(x,200);
  76.                setAPen(1);
  77.             }
  78.          move(30,900);
  79.          text((UBYTE*)"You're still there! Move up..");
  80.  
  81.       }
  82.       void callback(const IntuiMessageC* imsg)
  83.       {
  84.          puts("Canvas: mouse action!\n");
  85.       }
  86.       // runtime type inquiry support
  87.       static const Intui_Type_info info_obj;
  88.       virtual const Type_info& get_info() const     // get the 'type_id' to an existing object
  89.          { return info_obj; }
  90.       static const Type_info& info()                // get the 'type_id' of a specific class
  91.          { return info_obj; }
  92.  
  93. };
  94.  
  95. intui_typeinfo(MyCanvas, derived(from(Canvas)), rcs_id);
  96.  
  97.  
  98. class MyWindow : public GWindow
  99. {
  100.    private:
  101.       void init();
  102.  
  103.    public:
  104.       MyWindow(OWNER,AttrList& attrs) : GWindow(owner,attrs) { init(); }
  105.  
  106.       void On_CLOSEWINDOW(const IntuiMessageC* msg)
  107.       {
  108.          puts("CLOSEWINDOW.\n");
  109.          delete this;
  110.          running = FALSE;
  111.       }
  112.       void On_ACTIVEWINDOW(const IntuiMessageC* msg)
  113.       {
  114.          printf("%s is ACTIVE.\n",title());
  115.       }
  116.       void On_SIZEVERIFY(const IntuiMessageC* msg)
  117.       {
  118.          puts("SIZEVERIFY. \n");
  119.       }
  120.       virtual void handleIntuiMsg(const IntuiMessageC* imsg)
  121.       {
  122.          switch (imsg->getClass())
  123.          {
  124.             case CLASS_CLOSEWINDOW :
  125.                On_CLOSEWINDOW(imsg); break;
  126.             case CLASS_ACTIVEWINDOW :
  127.                On_ACTIVEWINDOW(imsg); break;
  128.             case CLASS_SIZEVERIFY :
  129.                On_SIZEVERIFY(imsg); break;
  130.          }
  131.          GWindow::handleIntuiMsg(imsg);
  132.       }
  133.  
  134.       // runtime type inquiry support
  135.       static const Intui_Type_info info_obj;
  136.       virtual const Type_info& get_info() const     // get the 'type_id' to an existing object
  137.          { return info_obj; }
  138.       static const Type_info& info()                // get the 'type_id' of a specific class
  139.          { return info_obj; }
  140.  
  141. };
  142.  
  143. intui_typeinfo(MyWindow, derived(from(GWindow)), rcs_id);
  144.  
  145.  
  146. void MyWindow::init()
  147. {
  148.    modifyIDCMP(CLASS_NEWSIZE|CLASS_CLOSEWINDOW|CLASS_ACTIVEWINDOW|CLASS_SIZEVERIFY \
  149.    |CLASS_GADGETDOWN|CLASS_GADGETUP|CLASS_MOUSEMOVE);
  150. }
  151.  
  152.  
  153. void APPmain(int argc,char* argv[])
  154. {
  155.    MySRSP sr(SIGBREAKB_CTRL_C);
  156.    BevelBox bevelBoxBorder;
  157.    LineBorder lineBorder;
  158.  
  159.    MyWindow* little = new MyWindow(OWNER_NULL,
  160.    AttrList(   WA_Title,"WindowC - close this to stop.",
  161.       WA_Width,300,
  162.       WA_Height,150,
  163.       WA_MinWidth,200,
  164.       WA_MinHeight,100,
  165.       WA_MaxHeight,600,
  166.       WA_MaxWidth,600,
  167.       WA_DragBar,TRUE,
  168.       WA_SizeGadget,TRUE,
  169.       WA_DepthGadget,TRUE,
  170.       WA_CloseGadget,TRUE,
  171.       WA_IDCMP,IDCMP_CLOSEWINDOW,
  172.       WA_SmartRefresh,TRUE,
  173.    // GOB_BorderObj(&lineBorder),
  174.       TAG_END) );
  175.  
  176. #ifdef USE_ITP
  177.    MapITP PGA2Canvas(NULL, AttrList(PGA_Top,CNV_ViewY,TAG_END) ),
  178.           GTSC2Canvas(NULL, AttrList(GTSC_Top,CNV_ViewX,TAG_END) );
  179.  
  180.    /* special ITransponder with the ability to serve two receiver objects. */
  181.    class C2S : public ITransponder
  182.    {
  183.          IntuiObject* receiver2;
  184.  
  185.          void sendNotification(AttrList& attrs)
  186.          {
  187.             puts("C2S::sendNotification received n.s. = "); attrs.print();
  188.  
  189.             attrs.mapAttrs(CNV_Width,GTSC_Total, CNV_VisibleX,GTSC_Visible, CNV_ViewX,GTSC_Top,
  190.                            CNV_Height,PGA_Total, CNV_VisibleY,PGA_Visible,  CNV_ViewY,PGA_Top,
  191.                            TAG_END);
  192.             puts("C2S: map to: "); attrs.print();
  193.  
  194.             // each receivers gets his own attrs it can work on
  195.             if (APPOK(receiver1))   receiver1->setAttributes(AttrList(attrs));
  196.             if (APPOK(receiver2))   receiver2->setAttributes(attrs);
  197.          }
  198.       public:
  199.             C2S(IntuiObject* rcv1=NULL,IntuiObject* rcv2=NULL)
  200.             {
  201.                setReceivers(rcv1,rcv2);
  202.             }
  203.             void setReceivers(IntuiObject* rcv1,IntuiObject* rcv2)
  204.             {
  205.                receiver1 = rcv1; receiver2 = rcv2;
  206.             }
  207.  
  208.    };
  209.  
  210.    C2S canvas2Scrollbars;
  211. #endif
  212.  
  213.    MyCanvas* canvas = new MyCanvas(little,
  214.    AttrList(  GOB_LeftFromLeftOfParent,0,
  215.       GOB_TopFromTopOfParent,0,
  216.       GOB_RightFromRightOfParent,-18,
  217.       GOB_BottomFromBottomOfParent,-18,
  218.       GOB_BorderObj(&bevelBoxBorder),
  219.       CNV_Width,100,
  220.       CNV_Height,1000,
  221.       CNV_GranularityX,5,
  222.       CNV_ViewX,1,
  223. #ifdef USE_ITP
  224.       ITRANSPONDER(&canvas2Scrollbars),
  225. #endif
  226.       TAG_END) );
  227.  
  228. #ifdef USE_ITP
  229.    GTSC2Canvas.setReceiver(canvas);
  230.    PGA2Canvas.setReceiver(canvas);
  231.    ULONG dummy = 0;
  232. #endif
  233.  
  234.    BoopsiGadget* boopsiG = new BoopsiGadget(little,
  235.       (UBYTE*)"propgclass",
  236.    AttrList(   GOB_LeftFromRightOfPred,2,
  237.       GOB_TopFromTopOfParent,0,
  238.       GOB_RightFromRightOfParent,0,
  239.       GOB_BottomFromBottomOfPred,0,
  240.       GOB_BorderObj(&bevelBoxBorder),
  241.       GA_Immediate,TRUE,
  242.       GA_RelVerify,TRUE,
  243.       PGA_Freedom,FREEVERT,
  244.       ICA_TARGET,ICTARGET_IDCMP,
  245.       PGA_NewLook,TRUE,
  246. #ifdef USE_ITP
  247.       PGA_Top,canvas->getAttribute(CNV_ViewY,dummy),
  248.       PGA_Visible,canvas->getAttribute(CNV_VisibleY,dummy),
  249.       PGA_Total,canvas->getAttribute(CNV_Height,dummy),
  250.       ITRANSPONDER(&PGA2Canvas),
  251. #else
  252.       CONSTRAINT(PGA_Top,canvas,CNV_ViewY),
  253.       CONSTRAINT(PGA_Visible,canvas,CNV_VisibleY),
  254.       CONSTRAINT(PGA_Total,canvas,CNV_Height),
  255. #endif
  256.       TAG_END) );
  257.  
  258.    GT_Scroller* gtscG = new GT_Scroller(little,
  259.    AttrList(   GOB_LeftFromLeftOfParent,0,
  260.       GOB_TopFromBottomOfPred,2,
  261.       GOB_RightFromLeftOfPred,0,
  262.       GOB_BottomFromBottomOfParent,0,
  263. //    GOB_BorderObj(&bevelBoxBorder),
  264.       GA_Immediate,TRUE,
  265.       GA_RelVerify,TRUE,
  266.       PGA_Freedom,LORIENT_HORIZ,
  267.       GTSC_Arrows,16,
  268. #ifdef USE_ITP
  269.       GTSC_Top,canvas->getAttribute(CNV_ViewX,dummy),
  270.       GTSC_Visible,canvas->getAttribute(CNV_VisibleX,dummy),
  271.       GTSC_Total,canvas->getAttribute(CNV_Width,dummy),
  272.       ITRANSPONDER(>SC2Canvas),
  273. #else
  274.       CONSTRAINT(GTSC_Top,canvas,CNV_ViewX),
  275.       CONSTRAINT(GTSC_Visible,canvas,CNV_VisibleX),
  276.       CONSTRAINT(GTSC_Total,canvas,CNV_Width),
  277. #endif
  278.       TAG_END) );
  279.  
  280. #ifdef USE_ITP
  281.    canvas2Scrollbars.setReceivers(boopsiG,gtscG);
  282. #else
  283.    canvas->setAttributes( AttrList(
  284.       CONSTRAINT(CNV_ViewX,gtscG,GTSC_Top),
  285.       CONSTRAINT(CNV_ViewY,boopsiG,PGA_Top),
  286.       TAG_END) );
  287. #endif
  288.  
  289.    little->refreshGList();    // display the gadgets
  290.  
  291.    while (running)
  292.    {
  293.       SignalResponder::WaitSignal();
  294.    }
  295.  
  296.    puts("main() end.\n");
  297. }
  298.